package config

import (
	"crypto/rand"
	"encoding/base64"
	"os"
	"path/filepath"
)

// GenerateEncryptionKey 生成加密密钥
func GenerateEncryptionKey() ([]byte, error) {
	key := make([]byte, 32)
	if _, err := rand.Read(key); err != nil {
		return nil, err
	}
	return key, nil
}

// SaveEncryptionKey 保存加密密钥到文件
func SaveEncryptionKey(key []byte) error {
	encoded := base64.StdEncoding.EncodeToString(key)
	return os.WriteFile(KeyFile, []byte(encoded), 0600)
}

// LoadEncryptionKey 从文件加载加密密钥
func LoadEncryptionKey() ([]byte, error) {
	data, err := os.ReadFile(KeyFile)
	if err != nil {
		return nil, err
	}
	return base64.StdEncoding.DecodeString(string(data))
}

// EnsureKeyExists 确保密钥存在，不存在则创建
func EnsureKeyExists() ([]byte, error) {
	// 创建配置目录
	if err := os.MkdirAll(filepath.Dir(KeyFile), 0755); err != nil {
		return nil, err
	}

	// 检查密钥文件是否存在
	if _, err := os.Stat(KeyFile); os.IsNotExist(err) {
		// 生成新密钥
		key, err := GenerateEncryptionKey()
		if err != nil {
			return nil, err
		}
		
		// 保存密钥
		if err := SaveEncryptionKey(key); err != nil {
			return nil, err
		}
		
		return key, nil
	}
	
	// 加载现有密钥
	return LoadEncryptionKey()
}